package com.tedu.API.list;

import org.junit.Test;
/**
 * 导入包问题：同一包的类需要导入
 *          impart java.util.ArrayList
 *          import java.util.List
 * 通配符*        匹配当前包【文件夹】下所有的类
 *            import java.util.*;
 */
import java.util.*;


/**
 * List集合
 * Collection顶级集合接口【容器】-----List集合【子接口】
 * List集合存储数据：存储有序并且重复的元素
 * List集合---接口---无法创建对象
 * 实现类：
 * ArrayList：【常用：List与ArrayList的方法完全一致】数组实现
 * LinkedList：双向链接实现
 * Vector：jdk1.0版本：性能：增强效率慢，线程安全！ --ArrayList
 * 重点：掌握List集合当中所有方法
 */

public class
ListAPI {

    @Test
    public void testGet(){
        //List集合  ---多态创建集合
        List<String> list=new ArrayList<>();
        //Collection  提供add方法 | List 提供add方法  【重写】
        list.add("三生三世");
        list.add("你的名字");
        list.add("抓娃娃");
        System.out.println("List集合"+list);
        //获取到：List集合中元素叫：你的名字
        String str=list.get(1);
        System.out.println("获取集合中："+str);
        //需求：获取List集合中所有元素 ---普通for
        for (int i=0;i<list.size();i++){//针对集合---下标：从0开始
            str=list.get(i);
            System.out.println("遍历List集合："+str);
        }
    }
    /**
     * set(int index, E e)  返回值：E
     * 作用：将给定元素设置到指定的下标位置处
     */
    @Test
    public void testSet(){
        List<String> list=new ArrayList<>();
        //Collection  提供add方法 | List 提供add方法  【重写】
        list.add("三生三世");
        list.add("你的名字");
        list.add("抓娃娃");
        //需求：List集合中元素“你的名字”修改为“749局”
        list.set(1,"749局");
        System.out.println("修改后List集合:"+list);
    }

/**List继承Collection[重载：拓展功能]
 * add(int index,E e)     返回值：void
 * 作用：将给定的元素插入指定位置
 * remove(int index)      返回值：E
 * 作用：将给定位置的元素从集合中删除
 *
 * 特点：查询快、增删慢---选择List/ArrayList
 */
    /**
     * 集合排序
     *  Random   伪随机数类    包位置：java.util
     *  next(数值)  返回值一个伪随机整数【范围：0~数值】
     *
     *  Collections 集合工具类  静态方法：sort
     *  sort()方法：针对集合元素是数值进行排序【默认：升序】返回值:List
     *
     * 需求：随机生成10个元素【整数：100以内】的集合---对集合排序
     */
    @Test
    public void testArrayList(){
        //创建List集合<整数>
        List<Integer> list=new ArrayList<>();
        //创建伪随机数
        Random r=new Random();
        for (int i=0;i<10;i++){//10个元素
            list.add(r.nextInt(100));//100以内
        }
        System.out.println("打印List："+list);
        //对list集合元素进行排序 Collections.sort(集合)
        Collections.sort(list);
        System.out.println("【有排序】打印List"+list);
    }

    /**
     * 需求：创建集合，存汉字，排序--能排【没规则】
     * sort(集合，Comparator)   重载功能：拓展排序的功能
     * 集合：排序集合
     * Comparator比较器：指定规则--【定规则：按照字符串长短排序】
     * 重写：compare()--定义比较规则，默认自带交换功能
     */
    @Test
    public void testComparator() {
        //创建集合--存：汉字
        List<String> list = new ArrayList<>();
        list.add("阿西吧");
        list.add("扫噶寺内");
        list.add("幺西");

        //比较器规则定义：按照字符串长短进行排序
        //Comparator比较器接口--创建1次对象--采用匿名内部类
        Comparator<String> com = new Comparator() {
            /**
             * 返回值 大于 0    4-2  交换
             * 返回值 小于 0    3-4  不交换
             * 返回值 等于 0    2-2  不变
             */

            @Override
            public int compare(Object o1, Object o2) {
                return 0;
            }



            //compare方法：针对集合【自定义】排序
            //参数1：泛型：Object o1 集合中假设第一【交换】个元素
            //参数2：泛型：Object o2 集合中假设第二【交换】个元素

        };
        Collections.sort(list);
        System.out.println("排序后集合："+list);
    }

}
//学习心得：练---拓展【计算机语言】---坚持【45%】
//JavaSE基础   JavaEE